home *** CD-ROM | disk | FTP | other *** search
- Here is an anti-debugging unit I created. Use AntiOn at the start of
- whatever has to be hidden (Password/Key gen) and AntiOff at the end.
-
- Actions:
- 1) Disable Keyboard
- 2) Change interrupts 1&3 {Trace and Breakpoint}
- 3) Loop until system time changes. {This will mess up Turbo Debugger}
-
- Note:
- Interrupts are accessed directly instead of through DOS function 25h,
- this will prevent a debugger that takes over all the interrupts from
- disabling from still being able to trace/add breakpoints.
-
- Right now, intxx is set to INT$20 (Halt program) which will crash the
- debugger. Set it's offset to $10 (INT$04) to just ignore the commands.
-
-
- {$A+,B-,D-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
-
- unit AntiDbug;
-
- interface
-
- {Enable anti-debugging technique's, Keyboard will no longer work}
- procedure AntiOn;
- {Disable anti-debugging technique's}
- procedure AntiOff;
- {Halts some debuggers (Turbo Debugger), called at unit init;
- Can be called freely}
- procedure HaltDebug;
-
- implementation
-
- var
- {Direct interrupt access}
- Int01: Pointer absolute $0:$004;
- Int03: Pointer absolute $0:$00C;
- IntXX: Pointer absolute $0:$080; {New interrupt, 04=$10, 20=$80}
-
-
- {Saved interrupts}
- SaveInt01,
- SaveInt03: Pointer;
-
- procedure Cli; inline($FA); {Clear interrupts}
- procedure Sti; inline($FB); {Store interrupts?}
-
- procedure HaltDebug; assembler;
- asm
- {Wait until clock timer changes}
- push ds
- xor ax, ax
- mov ds, ax
- mov ah, [046Ch]
- @@TimerWait:
- mov al, [046Ch]
- cmp al, ah
- je @@TimerWait
- pop ds
- end;
-
- procedure AntiOn;
- begin
- Port[$21] := Port[$21] or $02;
- {Disable interrupts}
- Cli;
- Int03 := IntXX;
- Int01 := IntXX;
- Sti;
- end;
-
- procedure AntiOff;
- begin
- Port[$21] := Port[$21] and $fd;
- {Enable interrupts}
- Cli;
- Int01 := SaveInt01;
- Int03 := SaveInt03;
- Sti;
- end;
-
- begin
- {Try to mess up debuggers}
- HaltDebug;
- {Save interrutps}
- SaveInt01 := Int01;
- SaveInt03 := Int03;
- end.